const std = @import("std");

pub fn build(b: *std.Build) void {
    // 使用musl作为C标准库的target配置
    // 这里使用linux-x86_64-musl作为示例，根据你的目标平台调整
    const target = b.resolveTargetQuery(.{});
    const optimize = b.standardOptimizeOption(.{});

    // 编译Lua静态库
    const lua_lib = b.addLibrary(.{
        .linkage = .static,
        .name = "lua",
        .root_module = b.createModule(.{
            .target = target, // 构建目标
            .optimize = optimize, // 构建模式
        }),
        // .use_lld = true,
    });

    // 添加Lua源文件
    const lua_src_dir = "thirdparty/lua-5.4.8/";
    const lua_sources = .{
        lua_src_dir ++ "lua.c",
        lua_src_dir ++ "lapi.c",
        lua_src_dir ++ "lauxlib.c",
        lua_src_dir ++ "lbaselib.c",
        lua_src_dir ++ "lcode.c",
        lua_src_dir ++ "lcorolib.c",
        lua_src_dir ++ "lctype.c",
        lua_src_dir ++ "ldblib.c",
        lua_src_dir ++ "ldebug.c",
        lua_src_dir ++ "ldo.c",
        lua_src_dir ++ "ldump.c",
        lua_src_dir ++ "lfunc.c",
        lua_src_dir ++ "lgc.c",
        lua_src_dir ++ "linit.c",
        lua_src_dir ++ "liolib.c",
        lua_src_dir ++ "llex.c",
        lua_src_dir ++ "lmathlib.c",
        lua_src_dir ++ "lmem.c",
        lua_src_dir ++ "loadlib.c",
        lua_src_dir ++ "lobject.c",
        lua_src_dir ++ "lopcodes.c",
        lua_src_dir ++ "loslib.c",
        lua_src_dir ++ "lparser.c",
        lua_src_dir ++ "lstate.c",
        lua_src_dir ++ "lstring.c",
        lua_src_dir ++ "lstrlib.c",
        lua_src_dir ++ "ltable.c",
        lua_src_dir ++ "ltablib.c",
        lua_src_dir ++ "ltests.c",
        lua_src_dir ++ "ltm.c",
        lua_src_dir ++ "lundump.c",
        lua_src_dir ++ "lutf8lib.c",
        lua_src_dir ++ "lvm.c",
        lua_src_dir ++ "lzio.c",
    };

    inline for (lua_sources) |source| {
        lua_lib.addCSourceFile(.{
            .file = b.path(source),
            // .flags = &.{ "-std=c99", "-DLUA_USE_LINUX" },
            // .flags = &.{"-std=c99"},
            .flags = &.{ "-std=c99", "-DLUA_COMPAT_5_3" },
        });
    }

    lua_lib.addIncludePath(b.path("thirdparty/lua-5.4.8"));
    lua_lib.linkLibC();

    // 创建主Zig程序
    const exe = b.addExecutable(.{
        .name = "zig_lua_example",
        .root_module = b.createModule(.{
            .target = target, // 构建目标
            .optimize = optimize, // 构建模式
            .root_source_file = b.path("src/lua_example.zig"),
        }),
        // .use_lld = true,
    });

    // 链接Lua库
    exe.linkLibrary(lua_lib);
    exe.addIncludePath(b.path("thirdparty/lua-5.4.8"));
    exe.linkLibC();

    // 安装可执行文件
    b.installArtifact(exe);

    // 创建运行步骤
    const run_cmd = b.addRunArtifact(exe);
    run_cmd.step.dependOn(b.getInstallStep());

    if (b.args) |args| {
        run_cmd.addArgs(args);
    }

    // 添加运行目标
    const run_step = b.step("run", "Run the Zig Lua example");
    run_step.dependOn(&run_cmd.step);
}
